package com.study.spark.scala.chapter05

object Scala05_Function_Hell_7 {
  def main(args: Array[String]): Unit = {
    // TODO 函数式编程
    // TODO 函数作为返回值返回,一般应用于内部函数在外部使用
    // TODO 闭包：一个函数是有了外部变量，把这个变量包含到它内部来使用，就改变了这个变量的生命周期
    // 将当前代码形成了一个闭合环境，称之为闭包环境，简称闭包

    //Scala2.12版本之前闭包功能采用匿名函数类实现
    //Scala2.12版本闭包功能采用更改函数声明实现

    // TODO 1.内部函数在外部使用时会有闭包
    def outer(a : Int): Int => Int ={
      def inner(b : Int): Int ={
        a + b
      }
      inner _
    }

    println(outer(10)(20))//30
    val f = outer(10)
    println(f)//com.study.spark.scala.chapter05.Scala05_Function_Hell_7$$$Lambda$5/2096171631@56cbfb61
    val ff = f(20)
    println(ff)//30

    // TODO 2.将函数作为对象使用时会有闭包
    // TODO 3.所有匿名函数都有闭包

  }

}
  